package br.com.paradigmas.modulos.repositorio.repositorio;

import java.util.ArrayList;

import br.com.paradigmas.modulos.consultas.artista.ConsultaArtista;
import br.com.paradigmas.modulos.consultas.musica.ConsultaMusica;
import br.com.paradigmas.persistencia.om.Album;
import br.com.paradigmas.persistencia.om.Artista;
import br.com.paradigmas.persistencia.om.Musica;

// @roteiro_05 && @roteiro_06
public class Repositorio 
{
	/*-*-*-* Variaveis *-*-*-*/
	ArrayList<Artista> artistas;
	ArrayList<Musica> musicas;
	ArrayList<Musica> favoritos;
	ArrayList<Album> albuns;
	
	/*-*-*-* Construtores *-*-*-*/
	public Repositorio()
	{
		artistas = new ConsultaArtista().getArtistas();
		musicas = new ConsultaMusica().getFileMusica();
		favoritos = new ArrayList<Musica>();
		albuns = new ArrayList<Album>();
		
		Artista artista = null;
		
		for (int i = 0; i < musicas.size(); i++) 
		{
			if(musicas.get(i).getArtista() != null)
			{
				for (Artista artista2 : artistas) 
				{
					artista = musicas.get(i).getArtista();
					
					if(musicas.get(i).getArtista().getNome().toLowerCase().equals(artista2.getNome().toLowerCase()))
					{ artista = null; break; }
				}
				
				if(artista != null)
				{ artistas.add(artista); }
			}
		}
		
		String nomeAlbum = "Bob Dylan";
		albuns.add(new Album(5001, nomeAlbum, new ConsultaMusica().getMusicas(musicas, nomeAlbum, "Album")));
		
		nomeAlbum = "Led Zeppelin";
		albuns.add(new Album(5002, nomeAlbum, new ConsultaMusica().getMusicas(musicas, nomeAlbum, "Album")));
		
		nomeAlbum = "Rolling Stones";
		albuns.add(new Album(5003, nomeAlbum, new ConsultaMusica().getMusicas(musicas, nomeAlbum, "Album")));
	}
	
	/*-*-*-* Metodos *-*-*-*/
	/**
	 * Adiciona um Artista
	 * 
	 * @author Djalma
	 * @param artista
	 */
	public void adicionarArtista(Artista artista)
	{
		try
		{
			artistas.add(artista);
		}
		catch (Exception e)
		{ e.printStackTrace(); }
	}
	
	/**
	 * Adiciona uma Musica
	 * 
	 * @author Djalma
	 * @param musica
	 */
	public void adicionarMusica(Musica musica)
	{
		try
		{
			musicas.add(musica);
		}
		catch (Exception e)
		{ e.printStackTrace(); }
	}
	
	/**
	 * Adiciona um Album
	 * 
	 * @author Djalma
	 * @param album
	 */
	public void adicionarAlbum(Album album)
	{
		try
		{
			albuns.add(album);
		}
		catch (Exception e)
		{ e.printStackTrace(); }
	}
	
	/**
	 * Localiza um artista a partir de uma String
	 * 
	 * @author Djalma
	 * @param artista
	 * @return artista || null (em caso de erro)
	 */
	public Artista localizarArtista(String nomeArtista)
	{
		try
		{
			for (Artista artista : artistas) 
			{
				if(artista.getNome().equals(nomeArtista))
				{ return artista; }
			}
		}
		catch (Exception e)
		{ e.printStackTrace(); }
		
		return null;
	}
	
	/**
	 * Localiza uma musica a partir de uma String
	 * 
	 * @author Djalma
	 * @param musica
	 * @return musica || null (em caso de erro)
	 */
	public Musica localizarMusica(String nomeMusica)
	{
		try
		{
			for (Musica musica : musicas) 
			{
				if(musica.getNome().equals(nomeMusica))
				{ return musica; }
			}
		}
		catch (Exception e)
		{ e.printStackTrace(); }
		
		return null;
	}
	
	/**
	 * Localiza um album a partir de uma String
	 * 
	 * @author Djalma
	 * @param album
	 * @return album || null (em caso de erro)
	 */
	public Album localizarAlbum(Album nomeAlbum)
	{
		try
		{
			for (Album album : albuns) 
			{
				if(album.getNome().equals(nomeAlbum))
				{ return album; }
			}
		}
		catch (Exception e)
		{ e.printStackTrace(); }
		
		return null;
	}
	
	/*-*-*-* Getters e Setters *-*-*-*/
	public void setMusicas(ArrayList<Musica> musicas)	{ this.musicas = musicas; }
	public ArrayList<Musica> getMusicas() 				{ return this.musicas; }
	
	public void setArtistas(ArrayList<Artista> artistas){ this.artistas = artistas; }
	public ArrayList<Artista> getArtistas() 			{ return this.artistas; }
	
	public void setAlbuns(ArrayList<Album> albuns)		{ this.albuns = albuns; }
	public ArrayList<Album> getAlbuns() 				{ return this.albuns; }
	
	public void setFavoritos(ArrayList<Musica> favoritos){ this.favoritos = favoritos; }
	public ArrayList<Musica> getFavoritos() 			 { return this.favoritos; }
}
